package Hanoi2.hanoi;

import Hanoi2.pile.ErreurPile;
import Hanoi2.pile.Tour;

public class Hanoi {

	protected Tour depart, milieu, arrivee;

	public Hanoi(int nb, Class C) {
		depart = new Tour(nb, C);
		milieu = new Tour(nb, C);
		arrivee = new Tour(nb, C);
		try {
			depart.remplir(nb);
			} catch (ErreurPile e) {
				System.out.println("Erreur au remplissage de la pile : " + e.getMessage());
		}
	}

	public void jouer() {
		try {
			oneStep(depart.capacite(), depart, arrivee, milieu);
		} catch (ErreurPile e) {
			System.out.println("Erreur de manipulation des Piles: "
					+ e.getMessage());
		}
	}

	public void affiche() {
		System.out.println("Depart:");
		depart.affiche();
		System.out.println("Milieu:");
		milieu.affiche();
		System.out.println("Arrivee:");
		arrivee.affiche();
	}

	// Empiler nb Disque de D vers A en se servant de M comme Tour auxiliaire
	protected void oneStep(int nb, Tour D, Tour A, Tour M) throws ErreurPile {
		if (nb > 0) {
			oneStep(nb - 1, D, M, A);
			A.empiler(D.sommet());
			D.depiler();
			oneStep(nb - 1, M, A, D);
		}
	}
}
